package com.aplink.generic.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.text.TextUtils;

import com.aplink.generic.constant.MasterConfigContant;

public class DateTimeUtils {
	public static String formatDateTime(final Date date) {
		final SimpleDateFormat dateFormatGmt = new SimpleDateFormat(
				MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
		return dateFormatGmt.format(date);
	}

	public static long getCurrentDateTime() {
		final Calendar cal = Calendar.getInstance();
		return cal.getTimeInMillis() / 1000L;
	}

	public static long getCurrentDateTime(final boolean isLocalTime) {
		if (isLocalTime) {
			final Calendar cal = Calendar.getInstance();
			return cal.getTimeInMillis() / 1000L;
		}
		return DateTimeUtils.getCurrentDateTime();
	}

	public static String getDateTime(final boolean isLocalTime,
			final long seconds, final String format) throws ParseException {
		final long milliseconds = seconds * 1000L;
		SimpleDateFormat dateFormatGmt = null;
		if (TextUtils.isEmpty(format)) {
			dateFormatGmt = new SimpleDateFormat(
					MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
		} else {
			dateFormatGmt = new SimpleDateFormat(format, Locale.getDefault());
		}
		if (!isLocalTime) {
			// dateFormatGmt.setTimeZone(TimeZone
			// .getTimeZone(MasterConfigContant.TIME_ZONE));
		}
		return dateFormatGmt.format(new Date(milliseconds));
	}

	public static String getDateTime(final long seconds) throws ParseException {
		return DateTimeUtils.getDateTime(seconds, null);
	}

	public static String getDateTime(final long seconds, final String format)
			throws ParseException {
		final long milliseconds = seconds * 1000L;
		SimpleDateFormat dateFormatGmt = null;
		if (TextUtils.isEmpty(format)) {
			dateFormatGmt = new SimpleDateFormat(
					MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
		} else {
			dateFormatGmt = new SimpleDateFormat(format, Locale.getDefault());
		}
		// dateFormatGmt.setTimeZone(TimeZone
		// .getTimeZone(MasterConfigContant.TIME_ZONE));
		return dateFormatGmt.format(new Date(milliseconds));
	}

	public static long parse(final String datetime) throws ParseException {
		final SimpleDateFormat dateFormatGmt = new SimpleDateFormat(
				MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
		// dateFormatGmt.setTimeZone(TimeZone
		// .getTimeZone(MasterConfigContant.TIME_ZONE));
		return dateFormatGmt.parse(datetime).getTime();
	}

	public static long parse(final String datetime, final String format)
			throws ParseException {
		final SimpleDateFormat dateFormatGmt = new SimpleDateFormat(format,
				Locale.getDefault());
		// dateFormatGmt.setTimeZone(TimeZone
		// .getTimeZone(MasterConfigContant.TIME_ZONE));
		return dateFormatGmt.parse(datetime).getTime();
	}

	private DateTimeUtils() {

	}
}
